package cn.edu.tju.elm.service;

import cn.edu.tju.elm.model.Order;
import cn.edu.tju.elm.model.dto.OrderDTO;
import cn.edu.tju.core.model.User;
import cn.edu.tju.elm.model.Business;
import cn.edu.tju.elm.model.OrderStatus;

import java.util.List;
import java.util.Optional;

public interface OrderService {
    Order createOrder(Order order, User currentUser);
    void deleteOrder(Long id, User currentUser);
    Optional<Order> findById(Long id);
    List<Order> findByCustomer(User customer);
    List<Order> findByCustomerId(Long customerId);
    Optional<Order> findByIdAndCustomer(Long id, User customer);
    
    // 新增方法
    List<Order> findByBusiness(Business business);
    List<Order> findByOrderState(OrderStatus orderStatus);
    Order updateOrderState(Long id, OrderStatus orderState, User currentUser);
    
    // 新增方法：获取订单详情（包含明细和食品信息）
    Order getOrderByIdWithDetails(Long id, User currentUser);
    
    // 新增方法：获取订单DTO
    OrderDTO getOrderDTOById(Long id, User currentUser);
    
    
    // OrderService.java (文档5) - 在接口中添加以下方法
    /**
     * 模拟支付成功（用于测试和演示，不调用真实支付接口）
     * @param orderId 订单ID
     * @param currentUser 当前用户（用于权限校验）
     * @return 支付后的订单实体
     */
    Order simulatePayment(Long orderId, User currentUser);
}